package com.circle;
import java.io.File;
import java.io.FileFilter;

public class Main {
    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        // 指定要计数的文件夹路径
        String folderPath = "E:\\temp\\temp";

        // 创建File对象以表示文件夹
        File folder = new File(folderPath);

        // 调用方法来计算文件数量
        long count = countFiles(folder);

        // 输出文件总数
        System.out.println("Total number of files: " + count);
        long end = System.currentTimeMillis();
        long times = end - start;

        System.out.println("总耗时" + times + "豪秒");
    }

    /**
     * 递归方法，计算文件夹中的文件数量。
     *
     * @param folder 要计数的文件夹
     * @return 文件夹及其所有子文件夹中的文件总数
     */
    public static long countFiles(File folder) {
        // 如果文件夹不存在或不是一个目录，则返回0
        if (!folder.exists() || !folder.isDirectory()) {
            return 0;
        }

        long count = 0; // 文件计数器
        File[] files = folder.listFiles(new FileFilter() {
            // 过滤掉所有非文件对象
            @Override
            public boolean accept(File file) {
                return file.isFile();
            }
        });

        // 将所有文件添加到计数器
        for (File file : files) {
            count++;
        }

        // 递归地对每个子文件夹调用此方法
        files = folder.listFiles(new FileFilter() {
            // 过滤掉所有非目录对象
            @Override
            public boolean accept(File file) {
                return file.isDirectory();
            }
        });

        // 对子文件夹中的文件进行递归计数
        for (File file : files) {
            count += countFiles(file);
        }

        return count;
    }
}